package org.monster.context.jar;

import java.io.IOException;
import java.io.InputStream;
import java.net.JarURLConnection;
import java.net.URL;
import java.util.jar.JarFile;
import java.util.zip.ZipEntry;

/**
 * 类文件处理器
 *
 * @author Monster
 */
public class JarFileHandler {

    /**
     * jar文件
     */
    private final JarFile jarFile;
    /**
     * jar文件Url
     */
    private final URL jarFileUrl;

    /**
     * 构造方法
     *
     * @param url Url
     * @throws IOException 输入输出异常
     */
    public JarFileHandler(URL url) throws IOException {
        // 通过URL获取JarURL的连接路径
        JarURLConnection jarConn = (JarURLConnection) url.openConnection();
        // 设置忽略缓存
        jarConn.setUseCaches(false);
        // 获取jarURL连接的jar文件
        jarFile = jarConn.getJarFile();
        jarFileUrl = jarConn.getJarFileURL();
    }

    /**
     * 获取 jar文件
     *
     * @return jar文件
     */
    public JarFile getJarFile() {
        return jarFile;
    }

    /**
     * 获取 jar文件Url
     *
     * @return jar文件Url
     */
    public URL getJarFileUrl() {
        return jarFileUrl;
    }

    /**
     * 获取 输入流
     *
     * @param name 名称
     * @return 输入流
     * @throws IOException 输入输出流
     */
    public InputStream getInputStream(String name) throws IOException {
        // 获取jar文件条目
        ZipEntry entry = jarFile.getEntry(name);
        if (entry == null) {
            return null;
        } else {
            return jarFile.getInputStream(entry);
        }
    }

}
